﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ThanNhanTao.Server.Enum;
using iMedical.ServiceLibrary.Bll.DanhMuc;

namespace ThanNhanTao.Server.Entities
{
    public class BenhNhanEntities
    {
        Dm_CauHinhBHYTBLL cauHinhBHYTBLL;

        public BenhNhanEntities()
        {
            if (cauHinhBHYTBLL == null)
                cauHinhBHYTBLL = new Dm_CauHinhBHYTBLL();
        }

        public string Ho{ get; set; }
        public string Ten { get; set; }
        public string HoVaTen 
        {
            get
            {
                return (Ho + " " + Ten);
            }
        }
        public int SLThuocDung { get; set; }
        public string SoNhapVien { get; set; }
        public bool GioiTinh { get; set; }
        public string GioiTinhString { 
            get
            {
                if (GioiTinh)
                    return "Nam";
                else
                    return "Nữ";
            }
        }
        public short Tuoi { get; set; }
        public int NamSinh
        {
            get
            {
                return (DateTime.UtcNow.Year - Tuoi);
            }
        }
        public DateTime? NgayVaoVien { get; set; }
        public DateTime? NgayRaVien { get; set; }
        public byte TinhHinhTuVong { get; set; }
        public string TinhTrangBenhNhan
        {
            get
            {
                if (NgayVaoVien == null)
                    return string.Empty;
                if (NgayRaVien == null)
                    return "ĐĐT";
                else
                {
                    DateTime ngayHienTai = DateTime.UtcNow;
                    if (NgayRaVien.Value > ngayHienTai)
                        return "ĐĐT";
                    else
                    {
                        if (TinhHinhTuVong==EnumTuVong.TuVong)
                        {
                            return EnumTuVong.TuVongVietTacString;
                        }
                        else if (TinhHinhTuVong==EnumTuVong.TamDung)
                        {
                            return EnumTuVong.TamDungVietTacString;
                        }
                        else if (TinhHinhTuVong == EnumTuVong.NangXinVe)
                        {
                            return EnumTuVong.NangXinVeVietTacString;
                        }
                        return string.Empty;
                    }
                }
            }
        }
        public string Khu { get; set; }
        public string NhomMau { get; set; }
        public string SoBHYT { get; set; }
        public string SoBHYTKhongCoMaDKBD 
        {
            get
            {
                if (string.IsNullOrEmpty(SoBHYT))
                    return string.Empty;
                return SoBHYT.Split('-')[0];
            }
        }

        public string MaDKBD
        {
            get
            {
                if (string.IsNullOrEmpty(SoBHYT))
                    return string.Empty;
                return (SoBHYT.Split('-').Count() > 1 ? SoBHYT.Split('-')[1] : string.Empty);
            }
        }
        public string MaBenh { get; set; }
        public DateTime NgayKham { get; set; }
        public decimal TienXetNghiem { get; set; }
        public string TienXetNghiemString {
            get
            {
                if (TienXetNghiem == 0)
                    return string.Empty;
                else
                    return TienXetNghiem.ToString("#,##0");
            }
        }
        public decimal TienThuoc { get; set; }
        public string TienThuocString
        {
            get
            {
                if (TienThuoc == 0)
                    return string.Empty;
                else
                    return TienThuoc.ToString("#,##0");
            }
        }
        public decimal TienMau { get; set; }
        public string TienMauString
        {
            get
            {
                if (TienMau == 0)
                    return string.Empty;
                else
                    return TienMau.ToString("#,##0");
            }
        }
        public decimal TienPTTT { get; set; }
        public string TienPTTTString
        {
            get
            {
                if (TienPTTT == 0)
                    return string.Empty;
                else
                    return TienPTTT.ToString("#,##0");
            }
        }
        public decimal TongCong { get; set; }
        public string TongCongString
        {
            get
            {
                if (TongCong == 0)
                    return string.Empty;
                else
                    return TongCong.ToString("#,##0");
            }
        }
        public decimal TienNguoiBenhChiTra 
        { 
            get
            {
                Dm_CauHinhBHYT dmCauHinhBHYT = null;

                // Trường có BHYT lấy thông tin quyền lợi và % đồng chi trả
                if (!string.IsNullOrEmpty(SoBHYT))
                {
                    // Lấy thông tin cấu hình BHYT
                    dmCauHinhBHYT = cauHinhBHYTBLL.FindBySoBHYT(SoBHYT);
                }

                //Nếu không có BHYT tế thì bệnh nhân trả hoàn toàn
                if (dmCauHinhBHYT == null)
                    return TongCong;
                else //Trường hợp có BHYT tính số tiền bệnh nhân chi trả
                    return TongCong * (100 - (decimal)dmCauHinhBHYT.PhanTramHuongBHYTKCB.Value) / 100;
            }
        }
        public string TienNguoiBenhChiTraString
        {
            get
            {
                // Chuyển đổi đến định dạng tiền
                return TienNguoiBenhChiTra.ToString("#,##0");
            }
        }

        public decimal TienDeNghiBHYTThanhToan 
        {
            get
            {
                // Lấy tổng tiền trừ tiền bệnh nhân chi trả = tiền bảo hiểm trả
                return TongCong - TienNguoiBenhChiTra;      
            }
        }
        public string TienDeNghiBHYTThanhToanString
        {
            get
            {
                // Chuyển đổi đến định dạng tiền
                return TienDeNghiBHYTThanhToan.ToString("#,##0");
            }
        }

        public decimal TienDeNghiChiPhiNQ { get; set; }

        public DateTime NgayChay { get; set; }
    }
}
